<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script type="text/javascript">
        // 预编译
        // 1.检查语法错误
        // 2.预编译
        // 3.解释一行执行一行

        // 具名函数会提升
        /* test(); // 1
        function test(){
            console.log(1);
        } */
        /* t(); // 报错
        // 匿名函数不会提升
        var t = function(){
            console.log(1);
        } */

        // 执行顺序
        // 1.寻找形参和变量声明 a--->undefined b--->undefined;
        // 2.实参值赋值给形参 a--->10
        // 3.寻找函数声明，赋值 a--->function a(){}  b--->function(){}
        // 4.执行代码 function a(){} 1 1 function () {}
        function test2(a = 5) {
            console.log(a); // function a(){}
            var a = 1;
            console.log(a); // 1
            function a() {}
            console.log(a); // 1
            var b = function () {}
            console.log(b); // function () {}

            function d() {}
        }
        test2(10);

        var a = 1;

        function a() {
            console.log(2);
        }
        console.log(a); // 1

        /* 
            全局
            GO:{
                f:undefined,
            }
            暗全局
            AO:{
                f:undefined,
                AO:{
                    c:undefined--->1--->function c(){},
                }
            }
        */

        var f = 3;
        console.log(c); // function c(){}
        function c(c) {
            console.log(c); // function c(){}
            var c = 2;
            console.log(c); // 2
            function c() { // 不执行
                var f = 5;
                console.log(f);
            }
        }
        c(1);
    </script>
</body>

</html>